// Promise 是一个类
// 1）传一个执行器 执行器是立即执行的
// 2）执行器两个参数  resolve reject 
// 3）promise 有三个状态  pendding => resolve 成功 或者  reject拒绝
// 4）一旦状态变化  就不可逆
// 5）promise then 方法   两个参数  第一个是成功的回调 第二个是失败的回调
// 6) then方法可以调用多次
// 7) 链式调用 核心是返回了一个新的promise  如果返回的是普通值 会走下一个then 的成功 如果是返回promise的话 就以它的状态 继续走下去
// 8) resolve 的有可能还是一个promise 所以要递归调用
// 9）用一个参数来 called 判断别人的 promise 状态改变 就不能再 改变了
// 10）then 可选参数
let Promise = require('./promise');

let p = new Promise((resolve, reject) => {
  resolve('成功')
  // reject('xx')
  // setTimeout(()=>{
  //   resolve('成功')
  // }, 1000)
})

p.then((data) => {
  console.log('成功', data)
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      reject('异步失败')
    }, 1000)
  })
  // throw Error('xxsds')
}, (err)=>{
  console.log('失败', err)
}).catch(err => {
  console.log('cat', err)
})

// p.then((data) => {
//   console.log('成功2', data)
// }, (err)=>{
//   console.log('失败2', err)
// })




